<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>

        /*
            原型 

            之前学习的构造函数的缺点
        */

        // 
        function Dog(name) {
            this.name = name;
            this.run = function () {
                console.log(this.name + '：跑');
            }
        }
        let d1 = new Dog('小白');
        let d2 = new Dog('小白');
        console.log(d1);
        console.log(d2);

        // 每次new的时候都是新创建的是一个对象
        console.log(d1 == d2);//false--地址不一样

        //d1的run  和 d2.run 相等吗？
        console.log(d1.run, d2.run);
        console.log(d1.name, d2.name);

        // true 基础 字符串
        console.log(d1.name === d2.name);
        // false 复杂类型（函数也是对象） 比较的两个函数的地址
        console.log(d1.run === d2.run);
        // 函数本质也是对象--通过function关键字声明函数-- 等于 新new了一个函数，
        // 新创建了一个对象，只要是新的对象，跟原来的对象的地址一定不一样
        var fn1 = function () { }//-new Function()
        var fn2 = function () { }//-new Function()
        console.log(fn1 === fn2);//false

        console.log([] === []);
        console.log({} === {});


        // 每一个对象 （d1和d2） 它里面里面都有run方法--但是每个人的run 都是一个新的run 
        // 虽然他们的代码一样--这样很浪费内存




        // js提供 原型这样一个概念来弥补 普通构造函数的缺点




    </script>

</body>

</html>